//package org.ricks.rpc.group;
//
//
//import org.ricks.common.lang.Logger;
//
//import java.util.*;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * 逻辑节点 分组
// * 涉及业务拿出去
// */
//public class RpcGroupManager implements GroupIo {
//
//    /**
//     * 对内 对外 其实是两个对象
//     * 那就意味其实也可以对玩家得session进行分组
//     * 也可以对逻辑节点进行分组
//     */
//    private final Map<String, RpcGroupManager.GroupUnit> groupSessionGroup = new ConcurrentHashMap<>();
//
//
//    /**
//     * 将AioSession加入群组group
//     *
//     * @param modularName
//     * @param session
//     */
//    @Override
//    public final synchronized void join(String modularName, AioSession session) {
//        RpcGroupManager.GroupUnit groupUnit = groupSessionGroup.get(modularName);
//        if (groupUnit == null) {
//            groupUnit = new GroupUnit();
//            groupSessionGroup.put(modularName, groupUnit);
//        }
//    }
//
//    @Override
//    public void remove(String group, AioSession session) {
//        RpcGroupManager.GroupUnit groupUnit = groupSessionGroup.get(group);
//        groupUnit.groupList.remove(session);
//    }
//
//    /**
//     * 如果逻辑节点故障，销毁
//     * @param session
//     */
//    public final void remove(AioSession session) {
//        for (String group : groupSessionGroup.keySet()) {
//            remove(group, session);
//            Logger.info(session + ": 正在从分组管理移除, groupId:" + group);
//        }
//    }
//
//    @Override
//    public Set<AioSession> get(String group) {
//        return groupSessionGroup.get(group).groupList;
//    }
//
//    @Override
//    public void writeToGroup(String group, byte[] t) {
//        GroupUnit groupUnit = groupSessionGroup.get(group);
//        groupUnit.groupList.forEach(session -> session.send(t));
//    }
//
//
//    private static class GroupUnit {
//        /**
//         * k=sid 节点唯一标识
//         * v=内部Session
//         */
//        Set<AioSession> groupList = new HashSet<>();
//    }
//
//    private RpcGroupManager() {}
//    public static RpcGroupManager me() {
//        return RpcGroupManager.Holder.ME;
//    }
//
//    /** 通过 JVM 的类加载机制, 保证只加载一次 (singleton) */
//    private static class Holder {
//        static final RpcGroupManager ME = new RpcGroupManager();
//    }
//
//}
